{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "d5004d2e-591c-475e-be1d-d7001faf43c1",
   "metadata": {},
   "source": [
    "Copyright (c) MONAI Consortium<br>\n",
    "Licensed under the Apache License, Version 2.0 (the \"License\");<br>\n",
    "you may not use this file except in compliance with the License.<br>\n",
    "You may obtain a copy of the License at<br>\n",
    "http://www.apache.org/licenses/LICENSE-2.0<br>\n",
    "Unless required by applicable law or agreed to in writing, software<br>\n",
    "distributed under the License is distributed on an \"AS IS\" BASIS,<br>\n",
    "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<br>\n",
    "See the License for the specific language governing permissions and<br>\n",
    "limitations under the License."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "63d95da6",
   "metadata": {},
   "source": [
    "# Classifier-free Guidance\n",
    "\n",
    "This tutorial illustrates how to use MONAI for training a denoising diffusion probabilistic model (DDPM)[1] to create synthetic 2D images using the classifier-free guidance technique [2] to perform conditioning. In classifier-free guidance, the model is taught to generate image using no conditioning (which is typically equivalent to replace the conditioning value by -1) and with conditioning. This is done by randomly setting part of the dataloader samples' conditioning to -1. On inference, you generate samples with no conditioning (i_uncond) and with conditioning (i_cond) from noise and, throughout the whole diffusion denoising chain, you set the intermediate image i to:\n",
    "\n",
    "<center> i = i_uncond + GS * (i_cond - i_uncond)</center>\n",
    "<br>\n",
    "\n",
    "GS is the guidance scale, a parameter set up by the user to strengthen the conditioning. It is a trade-off between image fidelity and diversity [2].\n",
    "<br>\n",
    "[1] - Ho et al. \"Denoising Diffusion Probabilistic Models\" https://arxiv.org/abs/2006.11239.<br>\n",
    "[2] - Ho and Salimans \"Classifier-Free Diffusion Guidance\" https://arxiv.org/abs/2207.12598\n",
    "\n",
    "\n",
    "\n",
    "## Setup environment"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "75f2d5f3",
   "metadata": {},
   "outputs": [],
   "source": [
    "!python -c \"import monai\" || pip install -q \"monai-weekly[tqdm]\"\n",
    "!python -c \"import matplotlib\" || pip install -q matplotlib\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6b766027",
   "metadata": {},
   "source": [
    "## Setup imports"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "972ed3f3",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MONAI version: 1.4.dev2431\n",
      "Numpy version: 1.26.4\n",
      "Pytorch version: 2.4.0+cu121\n",
      "MONAI flags: HAS_EXT = False, USE_COMPILED = False, USE_META_DICT = False\n",
      "MONAI rev id: 951a77d7a7737a3108afa94623a50b87d21eb4a7\n",
      "MONAI __file__: /home/<username>/PycharmProjects/MONAI_tutorials/venv/lib/python3.10/site-packages/monai/__init__.py\n",
      "\n",
      "Optional dependencies:\n",
      "Pytorch Ignite version: NOT INSTALLED or UNKNOWN VERSION.\n",
      "ITK version: NOT INSTALLED or UNKNOWN VERSION.\n",
      "Nibabel version: 5.2.1\n",
      "scikit-image version: NOT INSTALLED or UNKNOWN VERSION.\n",
      "scipy version: 1.14.0\n",
      "Pillow version: 10.4.0\n",
      "Tensorboard version: 2.17.1\n",
      "gdown version: 5.2.0\n",
      "TorchVision version: 0.19.0+cu121\n",
      "tqdm version: 4.66.5\n",
      "lmdb version: NOT INSTALLED or UNKNOWN VERSION.\n",
      "psutil version: 6.0.0\n",
      "pandas version: NOT INSTALLED or UNKNOWN VERSION.\n",
      "einops version: 0.8.0\n",
      "transformers version: NOT INSTALLED or UNKNOWN VERSION.\n",
      "mlflow version: NOT INSTALLED or UNKNOWN VERSION.\n",
      "pynrrd version: NOT INSTALLED or UNKNOWN VERSION.\n",
      "clearml version: NOT INSTALLED or UNKNOWN VERSION.\n",
      "\n",
      "For details about installing the optional dependencies, please visit:\n",
      "    https://docs.monai.io/en/latest/installation.html#installing-the-recommended-dependencies\n",
      "\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "import shutil\n",
    "import tempfile\n",
    "import time\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import torch\n",
    "import torch.nn.functional as F\n",
    "from monai import transforms\n",
    "from monai.apps import MedNISTDataset\n",
    "from monai.config import print_config\n",
    "from monai.data import CacheDataset, DataLoader\n",
    "from monai.utils import first, set_determinism\n",
    "from torch.amp import GradScaler, autocast\n",
    "from tqdm import tqdm\n",
    "\n",
    "from monai.inferers import DiffusionInferer\n",
    "from monai.networks.nets import DiffusionModelUNet\n",
    "from monai.networks.schedulers import DDPMScheduler\n",
    "\n",
    "print_config()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7d4ff515",
   "metadata": {},
   "source": [
    "## Setup data directory"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6efa1d0b-9e1d-4a20-82a5-f02a0ff357a5",
   "metadata": {},
   "source": [
    "Specify a `MONAI_DATA_DIRECTORY` variable, where the data will be downloaded. If not\n",
    "specified a temporary directory will be used."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "8b4323e7",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "/tmp/tmp1rqsnt_e\n"
     ]
    }
   ],
   "source": [
    "directory = os.environ.get(\"MONAI_DATA_DIRECTORY\")\n",
    "root_dir = tempfile.mkdtemp() if directory is None else directory\n",
    "print(root_dir)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "99175d50",
   "metadata": {},
   "source": [
    "## Set deterministic training for reproducibility"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "34ea510f",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "set_determinism(42)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fac55e9d",
   "metadata": {},
   "source": [
    "## Description of the data and download the training and validation dataset\n",
    "In this tutorial, we will train our models on the MedNIST dataset available on MONAI\n",
    "(https://docs.monai.io/en/stable/apps.html#monai.apps.MedNISTDataset).\n",
    "Here, we will use the \"Hand\" and \"HeadCT\", where our conditioning variable `class` will specify the modality."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "da1927b0",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2024-10-30 12:32:21,359 - INFO - Downloaded: /tmp/tmp1rqsnt_e/MedNIST.tar.gz\n",
      "2024-10-30 12:32:21,450 - INFO - Verified 'MedNIST.tar.gz', md5: 0bc7306e7427e00ad1c5526a6677552d.\n",
      "2024-10-30 12:32:21,450 - INFO - Writing into directory: /tmp/tmp1rqsnt_e.\n",
      "2024-10-30 12:32:42,225 - INFO - Verified 'MedNIST.tar.gz', md5: 0bc7306e7427e00ad1c5526a6677552d.\n",
      "2024-10-30 12:32:42,225 - INFO - File exists: /tmp/tmp1rqsnt_e/MedNIST.tar.gz, skipped downloading.\n",
      "2024-10-30 12:32:42,226 - INFO - Non-empty folder exists in /tmp/tmp1rqsnt_e/MedNIST, skipped extracting.\n"
     ]
    }
   ],
   "source": [
    "# Train\n",
    "train_data = MedNISTDataset(root_dir=root_dir, section=\"training\", download=True, progress=False, seed=0)\n",
    "train_datalist = []\n",
    "for item in train_data.data:\n",
    "    if item[\"class_name\"] in [\"Hand\", \"HeadCT\"]:\n",
    "        train_datalist.append({\"image\": item[\"image\"], \"class\": 1 if item[\"class_name\"] == \"Hand\" else 2})\n",
    "# Validation\n",
    "val_data = MedNISTDataset(root_dir=root_dir, section=\"validation\", download=True, progress=False, seed=0)\n",
    "val_datalist = []\n",
    "for item in val_data.data:\n",
    "    if item[\"class_name\"] in [\"Hand\", \"HeadCT\"]:\n",
    "        val_datalist.append({\"image\": item[\"image\"], \"class\": 1 if item[\"class_name\"] == \"Hand\" else 2})"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6986f55c",
   "metadata": {},
   "source": [
    "We use the following transforms:\n",
    "\n",
    "1. `LoadImaged` loads the hands images from files.\n",
    "1. `EnsureChannelFirstd` ensures the original data to construct \"channel first\" shape.\n",
    "1. `ScaleIntensityRanged` extracts intensity range [0, 255] and scales to [0, 1].\n",
    "1. `RandAffined` efficiently performs rotate, scale, shear, translate, etc. together based on PyTorch affine transform.\n",
    "\n",
    "### Classifier-free guidance during training\n",
    "\n",
    "In order to use the classifier-free guidance during training time, we need to not just have the `class` variable saying the modality of the image (`1` for Hands and `2` for HeadCTs) but we also need to train the model with an \"unconditional\" class.\n",
    "Here we specify the \"unconditional\" class with the value `-1` with a probability of training on unconditional being 15%. Specified in the following line using MONAI's RandLambdad:\n",
    "\n",
    "`transforms.RandLambdad(keys=[\"class\"], prob=0.15, func=lambda x: -1 * torch.ones_like(x))`\n",
    "\n",
    "Finally, our conditioning variable need to have the format (batch_size, 1, cross_attention_dim) when feeding into the model. For this reason, we use Lambdad to reshape our variables in the right format."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "e3184009",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "transforms_ = [\n",
    "    transforms.LoadImaged(keys=[\"image\"]),\n",
    "    transforms.EnsureChannelFirstd(keys=[\"image\"]),\n",
    "    transforms.ScaleIntensityRanged(keys=[\"image\"], a_min=0.0, a_max=255.0, b_min=0.0, b_max=1.0, clip=True),\n",
    "    transforms.RandAffined(\n",
    "        keys=[\"image\"],\n",
    "        rotate_range=[(-np.pi / 36, np.pi / 36), (-np.pi / 36, np.pi / 36)],\n",
    "        translate_range=[(-1, 1), (-1, 1)],\n",
    "        scale_range=[(-0.05, 0.05), (-0.05, 0.05)],\n",
    "        spatial_size=[64, 64],\n",
    "        padding_mode=\"zeros\",\n",
    "        prob=0.5,\n",
    "    ),\n",
    "    transforms.RandLambdad(keys=[\"class\"], prob=0.15, func=lambda x: -1 * torch.ones_like(x)),\n",
    "    transforms.Lambdad(keys=[\"class\"], func=lambda x: torch.tensor(x, dtype=torch.float32).unsqueeze(0).unsqueeze(0)),\n",
    "]\n",
    "\n",
    "train_transforms = transforms.Compose(transforms_)\n",
    "val_transforms = transforms.Compose(transforms_[:3] + [transforms_[-1]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "3a2fcf3f-c1ae-436d-a8a8-b8ce8ef697bb",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Loading dataset: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 15990/15990 [00:10<00:00, 1596.80it/s]\n"
     ]
    }
   ],
   "source": [
    "# Training dataset and loader\n",
    "train_ds = CacheDataset(data=train_datalist, transform=train_transforms)\n",
    "train_loader = DataLoader(train_ds, batch_size=128, shuffle=True, num_workers=4, persistent_workers=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "4c11b93f",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Loading dataset: 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1977/1977 [00:01<00:00, 1228.91it/s]\n"
     ]
    }
   ],
   "source": [
    "# Validation dataset and loader\n",
    "val_ds = CacheDataset(data=val_datalist, transform=val_transforms)\n",
    "val_loader = DataLoader(val_ds, batch_size=128, shuffle=False, num_workers=4, persistent_workers=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7f108ebb",
   "metadata": {},
   "source": [
    "### Visualisation of the training images"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "4105a01f",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "batch shape: torch.Size([128, 1, 64, 64])\n"
     ]
    },
    {
     "data": {
      "image/png": "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qc7kyZObsnt//7jjjkvT9J1d9768vsOr7+9GRPzLv/xLU37nO9+Z6rgsovnz5zfl22+/PdXRd2jde666ju5d4AMHDqRp2iZu+/V9Wc1viIj453/+56bsMqXcemvOxPLly1Odyy+/vClrf4zI76e7dZw3b16apn3Z7SPN3XLvQmumwdM5P6rrtlVyL9z72vp+vsuU0L6l45qbjzseXKaKZqi49/xVJXep2o46llUyPSrZKMPKpnLr5LJhPvjBDzZll9/x4he/eOC8XbtVcrcquU+VvKiueWmVOo4uv5L7UuGOtWHlXHXN9BpWNlTX31X2WyXTp2s/GpZKXpBr/3379qVpei515z+dtmTJklRn1qxZTdldD2juT0Rubzdua16JyzTRayLX/10WSCVTSpfnrj80m0vzUyL8+cfl06iuY8ug+Thds6G0/7nzuNv/ei4/6aSTUh3NJ3PZuCeffHJTXrZsWarzyU9+Mk3DYHof4fr/ueee25Rdfu5tt932Hefr5hORj9tKNu/WrVtTnZtvvrkpf+ADH0h1XKaR5txu3Lgx1dEMoUp+qMvUcllYmqnpxjFtS5dppecEtyx33LrlDZq3u/7SNlm9enWq49pErxvdueUtb3nLwHXUnKn169enOm6M0kwtd4+g5yjXZtom1Uy1NJ9OvwIAAAAAAAD+D3goBQAAAAAAgN7xUAoAAAAAAAC946EUAAAAAAAAejeug841tPHUU09NdTT8/Pjjj091zjjjjKZ89dVXpzpXXXVVmvbRj3504Dq+7nWva8rnnXdeqqMhlhpOHOHD91ywtdJgNxeQp0F3LqDPBaRpILCGMUbk0LQ9e/akOhp058IgXUCphu/NmDEj1dEQbxf0qdvr1tFN09DS//7v/051NOj+sssuS3U0kO9P//RPUx0X7KoBdS7YT8P39DcROcTO9Ss376eLYQU9u4BarecCEjV8VY+HiByY6sL4dT9GROzcubMpu6BdDbF1HxrQ7XCBkW7btN9Wwmhd0LIG+1bC2N28KgH17qMCyoU4uo9IVILONbTTta07/gcty+kahl0JY++q0icqgcmOC4RWlTB2nY+7jnB9Qn83rP3o+ohbb91Pro6eo905UlWPv8ryVdcxwvVJHct0PIyofQxFQ7zdtab7QIVey+iHRyJy+7tx/ODBg025so8iciCtC6jVPumCbrVtXV934ef6MRYXUKzLq3zowR3X7pjQeVXGf9dGEydObMozZ85MdTQM301zdXRees0akcPP3ceY3HUzBtP2dmPbypUrm/Ib3/jGVGf79u1NecGCBanOW9/61jTtB37gB5ryAw88kOqsWrWqKbt7z3e9611N2Y017h7l3nvvbcqu/+s1qRujdBxxY7Q7/+n9rju36rHtPqqg93GVMO6I2sd/dN7uHknPGzpmROR+FBGxdu3apnzRRRelOhp+/+Y3vznV0ecYv/3bv11avraJu9fXe23XjhMmTGjKbh9V8J9SAAAAAAAA6B0PpQAAAAAAANA7HkoBAAAAAACgdzyUAgAAAAAAQO/GddC5hi26gEQNFnQhwn/5l3/ZlD/2sY+lOh/+8IfTNA3/cgFh8+fPb8ouxE1D1Nx83LZpkJgL2tUQRw21i8ghci960YtSnYceeihN09DQM888M9XZt29fU3ZhjHPmzGnKLujRBWtqaKYL49aAXBfiroF0Lmjetb8G6d13332pjgbtv+c970l1fuM3fqMpu1Df97///WmatqULH9TlL1q0KNXREPnvplDzrnUc17d0Xi5UUfubhsNG5NDIadOmpTou6H/ZsmVNWUPNI3If0Q8YRETs2rWrKVdDDCuByF0CurvuI3cca/j//v37Ux0NsXfzceuk5xYXxqvnG/ehjcrynUqwtLZ/JbC+qhL0ruco1476OzdGuvWu/E63rfLBCNcelRD5CreOOra4UG133qyEuCr3wQa91nFh4NVjQuk+cm2rbVLp126dXHvomOi2Q5fvjmM3Juv2uzq6b906arC1Czp310h6TVDp2y7EV9vbtZEL39aAXte3tC+57dA2cce6+4iLrqc7tvSa3B1H+hGfSqh5RG4Td/2r7e0CmnWau4/QMcF9HAiZHv+ubbWPumutuXPnNmX3wZg/+7M/S9PuuOOOpvyLv/iLqc4tt9zSlN/73vemOj/4gz/YlN04+tWvfjVN077ljpHKGKlcHXf86/LcfYxyIeKV6xhHl+/GXx1v3TiqY6S7j3TnbV3Pm2++eeA6unv0s88+uylfccUVqc4f//Efp2kafu+eP+hzE3eNrPvbjaMV/KcUAAAAAAAAesdDKQAAAAAAAPSOh1IAAAAAAADo3bjOlNIMJfcu6O7du5vy3/7t36Y6n/vc55ry7/3e76U68+bNS9P0ffk3velNqY7mHjn6Lqp7F9nlRVXcddddTdnl1Wimx9atW1OdqVOnpmn6frxm00Tkd68PHjyY6ug7xJrDFeG3v/LOsL4L7vIStN9oe0T4DB3NPnCZAvru8cqVK1OdF77whU35N3/zNwcuKyLiqquuaspuvfUdZvcusL7767bV5RyMB5Usoq75RKqS11F5z17zmyLyOFLJNIjI2SfunfaZM2c2Zc14i4hYv359U964cWOq445tfRfebX81H+l/c5ky1ZwZpfkEe/bsSXX+4i/+oim7/LAvfOELaZqOCe49ez3eXKaFTqvm97h8COXGDaVjbSX3yemaO1TRtW9NmDChKbvjSI+Jl7zkJanOP/zDPwxcftc20v6mx2yEz/RRLtND+5brf/o7lynlskBc9pHS7BM3b53mluXOkZX+r+3trr8OHDjQlLds2ZLquGNbzwmVaxuXV6XjiMtUcceRtolrN80Lc3UqmV7uekz7khtrdN6u/fUazeVHubwmPW7c8nW/aX5URM4Cc9lg7hq1yzmpMra6OrpOZErV6P5+zWtek+rceOONTVnHg4icIeSuo9x1tM7bXX/rtYUbo3WdbrjhhlRnw4YNaVrlGNXx140/OtZpnvBT0X7rjm0dE9xY78YN5dpNj1t3bOk+cXlRuh0LFy5MddzvdLx11+grVqxoyi4b7Ed+5Eea8qWXXprquDFa88lcppXe/7t11H1S2R8O/ykFAAAAAACA3vFQCgAAAAAAAL3joRQAAAAAAAB6x0MpAAAAAAAA9G5cB51riKEL1Tz//PObsgsx/P3f//2mvGDBglRHA9MjIq688sqmfMkll6Q6GhB85513pjrnnntuU3ZBcy40TgMar7vuulRHAzldiPLkyZObsgvoc8vX0HCdT0QORHPhixqi5/ajC6hTLsRN5+XqaPi3C7V34aO63i6gT0M8b7/99lRHafB5RMQVV1yRpq1ataop33vvvanOlClTmrILOpw0aVJTdts6HlRCzIcVdF4NetV67tjW5bsPNmgYoobTRvhjS8OPly1bNrCO6/86brqgdRfir+vkQnQ1aNiFE1cCoyttWwmxdB+n0LGteozo2OLOIzq2VYJuXV/r2v8rYdCVj0qM5LGl7e3OB+7crucyd27Tc5Tr27r/n//856c6Lui8ohKGrO1YDVDWY8J96ENDa12Iv05zodIuxFePJRdQq1xAqgbEurHOHVsa/lsJ0dbg+wh/baN27tyZpumx5cYNDZF3x5rWcWH47mM0GpDulq8Bxe76S8ftatC99j8XEK7Xse6DIbr/XRu58H+3L5WOJe43Os2dazSw36lcN1SObVfHjX8YTAOp/+iP/ijV0fH36quvTnWWLFnSlPVDWBERt9xyS5qm11+u//3Wb/1WU7788stTHT2Pufm4cfO0005ryu5jSHqMuHGk8lELd47Q+ya33hpG7oLm9fhz19HuQx9az42tbl6D6riPATnaJm4f6XnE3WuuXbu2KbsPb7zsZS9L03Rs1flE5I//uLFG2819+KiC/5QCAAAAAABA73goBQAAAAAAgN7xUAoAAAAAAAC9G5/hMf8/fYfTvS/6hje8oSm7LAR9F93Nx73nevbZZzflyy67LNXRd2Hd+6r6fvIpp5yS6rj31TXDwGXB6PLde6aaM7V48eJUR3MnIiLWrVvXlOfPn5/qaBaDe6dYswg0BynCv0Os+8llCui7/y7TQvMytm3bluq4ddI+4d6z1v3mci8efvjhpqzveEfk3KeIiPe9731N+ad+6qdSnfvvv78pn3766amObq/LfXDHxHjUNXenmuEy6HcuL0P7iOtH2kfdfPS974h83LgskLlz5zblRYsWpTpnnHFGUz711FNTHTduaabdoUOHUh0dxzXjyU1z+QWVDAHXbq5NBs3bzcflHOnvdDyOqPW/Sl5DJfep8ju3/EqmhMs50DHSjWOVbEKdjxuP3bx1mjv/6fJcXoIu73nPe16q03XcqORu6f532ZDuuNHzret/Ot67c722m8u0c1lUer3jrqMqmVbaRu56yGUaaT6Ky4vTnCl3rqvkHrn11mNL8zsi8jVJ5dhy10OubTVnyl0jafu7Plu5jnRjlO4nd2zp+cdtv26vnlci/HprppajY5vbj7pt7pzhsvkqWXi6vEpeodtWd2+DwX75l3+5KbtsOL1ucdl8mkXo8js///nPp2naJ+65555UR7OA3DpqP3L3mm69K5lyeh515xodozUrK8JfI+jy3Bitv3PjmI41bj7uvKV5ye46Uu8j3TWKZii5MdJdo1SuEfR37hyledVuX+szi4iIiy66qCn/+I//eKrz8Y9/vClv2rRp4Dq6jMMK/lMKAAAAAAAAveOhFAAAAAAAAHrHQykAAAAAAAD0jodSAAAAAAAA6N24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",
      "text/plain": [
       "<Figure size 1200x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Class data shape:\n",
      "torch.Size([128, 1, 1])\n"
     ]
    }
   ],
   "source": [
    "check_data = first(train_loader)\n",
    "print(f\"batch shape: {check_data['image'].shape}\")\n",
    "image_visualisation = torch.cat(\n",
    "    [check_data[\"image\"][0, 0], check_data[\"image\"][1, 0], check_data[\"image\"][2, 0], check_data[\"image\"][3, 0]], dim=1\n",
    ")\n",
    "plt.figure(\"training images\", (12, 6))\n",
    "plt.imshow(image_visualisation, vmin=0, vmax=1, cmap=\"gray\")\n",
    "plt.axis(\"off\")\n",
    "plt.tight_layout()\n",
    "plt.show()\n",
    "print(\"Class data shape:\")\n",
    "print(check_data[\"class\"].shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "08428bc6",
   "metadata": {},
   "source": [
    "## Define network, scheduler, optimizer, and inferer\n",
    "At this step, we instantiate the MONAI components to create a DDPM, the UNET, the noise scheduler, and the inferer used for training and sampling. We are using\n",
    "the original DDPM scheduler containing 1000 timesteps in its Markov chain, and a 2D UNET with attention mechanisms\n",
    "in the 3rd level, each with 1 attention head (`num_head_channels=64`).\n",
    "\n",
    "In order to pass conditioning variables with dimension of 1 (just specifying the modality of the image), we use:\n",
    "\n",
    "`\n",
    "with_conditioning=True,\n",
    "cross_attention_dim=1,\n",
    "`"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "bee5913e",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    },
    "lines_to_next_cell": 0
   },
   "outputs": [],
   "source": [
    "device = torch.device(\"cuda\") if torch.cuda.is_available() else \"cpu\"\n",
    "num_train_timesteps = 1000\n",
    "model = DiffusionModelUNet(\n",
    "    spatial_dims=2,\n",
    "    in_channels=1,\n",
    "    out_channels=1,\n",
    "    channels=(64, 64, 64),\n",
    "    attention_levels=(False, False, True),\n",
    "    num_res_blocks=1,\n",
    "    num_head_channels=(0, 0, 64),\n",
    "    with_conditioning=True,\n",
    "    cross_attention_dim=1,\n",
    ")\n",
    "model.to(device)\n",
    "scheduler = DDPMScheduler(num_train_timesteps=num_train_timesteps)\n",
    "optimizer = torch.optim.Adam(params=model.parameters(), lr=2.5e-5)\n",
    "inferer = DiffusionInferer(scheduler)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2a4d3ab2",
   "metadata": {},
   "source": [
    "### Model training\n",
    "Here, we are training our model for 75 epochs (training time: ~50 minutes)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "6c0ed909",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    },
    "lines_to_next_cell": 0
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch 9/75: loss 0.015545\n",
      "epoch 9/75: loss 0.018481\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbsAAAHRCAYAAADzBhciAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAo3ElEQVR4nO3dXWjed/nH8SvaJE2aNGnSpku7rm5ztmyguMEYyBjOoSI+IIgngk4FET1QUEQ8UUHQgagnMhFxInjmkYMdOvABpweCiA7Zg9u6tkkf0jy0ee7yP/DfYt3v8+l9X/ktTa6+X2f7ffv93b/HXP/b/+d73T0bGxsbAQBAYW+60QcAAMAbjWIHACiPYgcAKI9iBwAoj2IHACiPYgcAKI9iBwAoj2IHACiPYgcAKI9iB3ToW9/6VvT09MS5c+du9KFERMQvfvGL6OnpiZdeeulGHwqw7VHsAADlUewAAOVR7AAA5VHsgC7Nzs7Go48+GqOjozEyMhKf/vSnY3Fx8er4E088EQ8//HBMTExEf39/3H333fH444+/bj9vectb4oMf/GD84Q9/iPvvvz92794dd9xxR/zyl7983b/9xz/+EQ8//HAMDAzErbfeGt/5znfitddee0PPE6hk140+AGCn+fjHPx633357fPe7342//vWv8bOf/SwmJibisccei4iIxx9/PO6555748Ic/HLt27Yonn3wyvvCFL8Rrr70WX/ziF6/Z1/PPPx8f+9jH4rOf/Wx86lOfip///Ofx6KOPxn333Rf33HNPRERMTU3Fu9/97lhfX4+vf/3rsWfPnvjpT38aAwMDW37uwI61AaAj3/zmNzciYuMzn/nMNds/+tGPboyPj1/978XFxdfNfd/73rdxxx13XLPt6NGjGxGx8bvf/e7qtjNnzmz09/dvfOUrX7m67ctf/vJGRGz8+c9/vubfjYyMbETExr///e/NnhpQHv8zJtClz3/+89f894MPPhjnz5+P+fn5iIhrvnHNzc3FuXPn4qGHHooXX3wx5ubmrpl79913x4MPPnj1vw8cOBDHjh2LF1988eq2p556Kh544IG4//77r/l3n/jEJ1o9L6Ayih3Qpdtuu+2a/963b19ERFy4cCEiIv74xz/GI488Env27InR0dE4cOBAfOMb34iIeF2x+999XdnflX1FRLz88stx1113ve7fHTt2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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch 19/75: loss 0.013958\n",
      "epoch 19/75: loss 0.016001\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbsAAAHRCAYAAADzBhciAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAylElEQVR4nO3dWYzddf3/8XeFMp3pMltX2k5bypQCBcoihgoYRQhLooKIxBhZYox6Z0JcLlCJkMYLLww3XpgYkAsNm6IBBVmkxrDXChRo6TLdYZZ2pu2U6RTmf/GL/K1+Xi/OfObb05mPz0fyS35+Pv2c893OeWf09XmfSSMjIyMBAEDBPna8DwAAgGONYgcAKB7FDgBQPIodAKB4FDsAQPEodgCA4lHsAADFo9gBAIpHsQMAFI9iB9Toxz/+cUyaNCl6enqO96FERMTNN98cixcvPt6HAUwIFDsAQPEodgCA4lHsAADFo9gBo7Rv3764+eabo6WlJZqbm+OWW26JwcHBo/7NfffdF+eff340NjZGW1tb3HjjjbF9+/aj/s2aNWviS1/6UnR0dERDQ0MsXLgwvvOd78ShQ4f+6z1/97vfxYoVK2LKlCmxYsWKePjhh4/pOQKlOfF4HwAw0dxwww2xZMmSWL16dbzyyivxy1/+MmbPnh0//elPIyLirrvuittvvz1uuOGG+PrXvx7d3d1x9913x6WXXhpr166NlpaWiIi4//77Y3BwML71rW9Fe3t7vPDCC3H33XfHjh074v777//w/R5//PH44he/GGeccUasXr06ent745ZbbokFCxYcj9MHJqYRADX50Y9+NBIRI7feeutR49dee+1Ie3v7yMjIyMjWrVtHTjjhhJG77rrrqH/z6quvjpx44olHjQ8ODv7Xe6xevXpk0qRJI11dXR+OrVy5cmTevHkj+/bt+3Ds8ccfH4mIkUWLFlVxakDx+K8xgVH65je/edR/vuSSS6K3tzcGBgbioYceig8++CBuuOGG6Onp+fD/5s6dG52dnfH0009/uK6xsfHD///gwYPR09MTq1atipGRkVi7dm1EROzevTv+8Y9/xE033RTNzc0f/vvLL788zjjjjGN8pkA5+K8xgVHq6Og46j+3trZGRMTevXtj48aNMTIyEp2dncm1kydP/vD/37ZtW/zwhz+MRx55JPbu3XvUv+vv74+IiK6uroiI5Ouddtpp8corr+SfCPA/hGIHjNIJJ5yQHB8ZGYkPPvggJk2aFI899ljy302bNi0iIt5///24/PLLo6+vL773ve/F8uXLY+rUqbFz5864+eab44MPPjim5wD8r6HYARVaunRpjIyMxJIlS2LZsmXy37366quxYcOGuOeee+JrX/vah+NPPPHEUf9u0aJFERGxcePG/3qNt956q6KjBsrH/2YHVOi6666LE044Ie64444YGRk5am5kZCR6e3sj4v//dfjv/2ZkZCR+/vOfH7Vm3rx5sXLlyrjnnns+/K82I/6vKK5fv/5YnQZQHP6yAyq0dOnSuPPOO+MHP/hBbN26Nb7whS/E9OnTY8uWLfHwww/HN77xjbjtttti+fLlsXTp0rjtttti586dMWPGjHjwwQf/63+7i4hYvXp1XHPNNXHxxRfHrbfeGn19fXH33XfHmWeeGQcOHDgOZwlMPPxlB1Ts+9//fjz44IPxsY99LO6444647bbb4pFHHokrrrgiPve5z0XE/wVV/vCHP8TKlStj9erVcccdd0RnZ2fce++9//V6V155Zdx///3x/vvvxw9+8IN46KGH4le/+lVccMEF9T41YMKaNPKf/10LAACF4S87AEDxKHYAgOJR7AAAxaPYAQCKR7EDABSPYgcAKF7Nm8qnTJki50466aTkuOoh6HzsY7r+Tpo0adSvl/te77///qiPQc25Na4HYs751muN43azVN3zUd1Ddww598m9Xs7uHffsKe74hoeHk+Mnnqg/4u7zqebU5yLC31u1zl07dU5HjhyRa9w1Uutyv3Ny7qG6Ru613DVS9zf3c5Zzn9Q1cs+XO191Tu+9955cU0tzBf6yAwAUj2IHACgexQ4AUDyKHQCgeBQ7AEDxKHYAgOLVvPXARXAnT56cHK96G0FO7D/39XJixTnc+6i53FhxzjVSkePcmL46p9zXU3LO1cXqc6LXuVswVGT70KFDck3Os9LQ0DDqORf7z7l+bo06J3fcOXH33Nh/zjmpZ0Vts/io11PH4LacqK1iTs62Endd3X1S12is38n8ZQcAKB7FDgBQPIodAKB4FDsAQPEodgCA4tWcxsxpKFuvRGNE9c2Mx4OqmybnpBrr8Vr1ltOMN0duGjknjaY+ny0tLXLNtGnT5JxK7LkkX07Czn2vqLnGxka5xh2fej2XhHRzKoXu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zZuT49dff71c447vjDPOSI4vWrRIrnnyySflXG9vb3J8+/btco2K46vIf4TfRqAizCpCHRExODgo51RM3/2Sg4o9NzQ0yDXOwYMHk+MuKu0696tIu+vo7+YU9+ypz5PbKuCOQW2BcPF0xV1Xty1BXfOcLQnuvdz3itpqtGTJErnG/TLEnj17kuP33nuvXOM+7+6XKxR13929dfcp5/mvBX/ZAQCKR7EDABSPYgcAKB7FDgBQPIodAKB4laQxc+SkJ92cSvnlpH4iImbMmJEc37Vrl1zz61//OjmuElMRPqmprpFqZBwRcckll8i5rVu3jup9InRSzd0Ll2pUqTzXsDgnJenuU2NjY3LcNW52r9fX15ccb2trk2tcolClztzzqq6fW+PScuqZcM9KzufTrVHXKDeNmdNI2DVAVtw1WrFiRXJcPZMREfv27ZNzv/jFL5Ljr7/+ulzjktTqM+DOaXh4ODnurndOEjjnxwj+HX/ZAQCKR7EDABSPYgcAKB7FDgBQPIodAKB4FDsAQPFq3nqQIyemnBsvzWkemhMrdnFt1RB43bp1co1q9hyhGzcvXrxYrmlvb5dzKp4+MDAg16gososvu8ix2kbgGiOraLPj1uzcuTM5nrvtZebMmcnxnKh7RN52D3X93LYN19RZPee5W5BytgapY3fbVNycukbuM+0aiqvj6+zslGtmzZqVHHffew888MCo59znyT2X6jvMfY+qxte5371qLrdh97/wlx0AoHgUOwBA8Sh2AIDiUewAAMWj2AEAikexAwAUr5KtB1X+IkI9o81ubmhoKDme04HfdSC/88475dySJUuS41dccYVcs2rVKjmnYtkqih8RMXv27OS4i/YfPnxYzqmYt4uMu1i2ijerOLRb093dLde4c1Ixb3cMOdscXJRbxbJdzNxdc/V5cvfdRfgVFydXx+fOyc2p+6R+4STC/8KI+my4rQfK448/Luduv/12Oae2MqjtMBER27Ztk3PqO9FtU2lqakqOu+fBPcvqO3asdYa/7AAAxaPYAQCKR7EDABSPYgcAKB7FDgBQvErSmCotV89G0Or1XOLSNSNVSTqXYFPHMHXqVLlGNVqOiHjrrbdGvcYlCm+++ebk+P79++Wa3/72t8lxl6aaO3eunFu2bFlyvKOjI+v11D10SciTTz45Oa4SuB91DOr6NTY2yjWOOif32VDPWE7iMkLfX5fGdIk99cy650idk7sOLi2tkpWuebpLY6qG7NOmTZNrVOPm7373u3LNwoUL5ZzyzjvvjHpNRF6qVz0T7tmrVxL+qPcc02oAACYAih0AoHgUOwBA8Sh2AIDiUewAAMWj2AEAindMtx7UU9VbGdQ61xBYxWlzG5iqdVu2bJFrNm7cKOdefPHF5PiCBQvkGhVFdu+jGu5GRFx22WXJ8U984hNyzd69e+Wcanjrmvuqe+ia57qI/I4dO+Sc4uLpzc3NyXEXvVb3yR232yqg4uSuua/blqDi5O74VNzdXYe2tjY5p+6v2yLi7pO6fvfdd59c88tf/jI57mL6bquRWue+p9x9Ut85buuBuodua4v7Xlbfo+5ZqQV/2QEAikexAwAUj2IHACgexQ4AUDyKHQCgeJNGaowrqp9/j/BNPeUbj/En1o8Xd9zqUrrr45KLKjXlUkkuuaUSVS5hp47dJdjc8amkoWsE7eYuvfTS5PgnP/lJuUYdX27D7p07dybHXVNul25TjX9dwlQl31wizqUx1ZxL+eWkRd0a1czbXQd3XXMabO/Zs0fOPfroo8nx3/zmN6N+vfnz58s1/f39cm5gYCA57j7Tra2tcu7gwYPJcfcdlvNDAI76jnXfK7U0vuYvOwBA8Sh2AIDiUewAAMWj2AEAikexAwAUj2IHAChe8VsPct9HxVzduar3cjFgt/XAxcZz5DRSVY1mXeNa12hWnVNTU5Nc445bxdNvuukmuebyyy9Pji9btkyucVQ0XMXCIyIGBwflnIrWu8i92griovg5crfR5HwO1VeTe762bdsm57Zv354cf+211+Sap59+Ws5t2rQpOf7uu+/KNbNnz06Oq8h/hN62EaGfPXcv3Fe+mnOfwZwm5O4Y1LPinqHdu3fLuX/hLzsAQPEodgCA4lHsAADFo9gBAIpHsQMAFI9iBwAoXiVbD3Kiojlr6imnk7eKZbstBDndxN2anNdzx6fWuDh0zi85uK0MbW1tcm7v3r3JcbeV4fTTT0+Of/azn5Vr1K8rREScfPLJyfHcru/qlwDcNVKfG/erAu741DOR85mOyNuepDrZv/zyy3LNmjVr5Nybb76ZHHe/bHDgwAE5p7S0tMg5teWkt7dXrnG/uKE+T27LSdVbxXK2NOVsPXBr+NUDAACCYgcA+B9AsQMAFI9iBwAoHsUOAFC8mtOYM2fOlHMumSffOCN1Wc+kpros7hhy03dK1ddIzbk0VU5qNuf1ctOd6r1cY13FNVp2TaJXrVqVHD///PPlmoULF8o59Vlz1yjnfHOamrt0p0v17tixIzm+fv16uUalJ5977jm5RjV7jtDJRdeoXTVujtDpWNcAXCUrc+5fhP5suHvhUr1VpnBzGk7nvh5pTAAAgmIHAPgfQLEDABSPYgcAKB7FDgBQPIodAKB4464RtDMemkRXvb3AyYng1uu65l6HnKaxbo2KUefE6g8fPizXuPNVTaenTJki17jm1ireP336dLlmyZIlozq2CH+N1DG4psmbN2+Wc7t27UqO9/X1yTXqvrtzqnprkLtG6nkZGhqSa1S0320HcNQ1yr0O6nxzthrlfkfkNNR/9913P/p1s44GAIAJhGIHACgexQ4AUDyKHQCgeBQ7AEDxKHYAgOKNu189GA+/bODU8/hyth7kqFcU2b1X1dsp3OtNnjx51Gtc7Dnn1yQcdRyDg4NyjbpPLjqf87l118GdrzoOtz2jsbExOe7uU84xuF89eO+99+Sceo5yPhs5x+2M9+/Rqt+HXz0AACAodgCA/wEUOwBA8Sh2AIDiUewAAMWrufvoeEjc5DQ3rboZdY56nlPVCVP1ei495l5PJctyEpxuziUNq26WnZOEzLl+rhG0Sgaq8Y+iUpcuuZhzXd11GB4eTo7nXlc15xo3u+copwlzlcn1iPols6tORFf9vVcL/rIDABSPYgcAKB7FDgBQPIodAKB4FDsAQPEodgCA4o27rQe56hmNzXm9470motqtFvWMQ7uoec7WCBVpz2mI7d4r9zrkrFNbBXKi+O4Ycs9JbVk48UT9FaTOKTfar+bc9oycBuA5z0ruZzOnCXnOtpycrTK5z0rO9qSaXndMqwEAmAAodgCA4lHsAADFo9gBAIpHsQMAFK/mNGa95KaSxnMj6Fzj+fhyr2tOQisnjVn1+7g5ZazpsSreq+pnqOrXc2lHdc1dmtDdd5UIzU3hKrlN0pWq083u+NT5uuNW9zD3Pqnjy7kXR60f02oAACYAih0AoHgUOwBA8Sh2AIDiUewAAMWj2AEAikcjaGRx167qKHdOM96q5WwjyN2e4c5XyYmMV93c1825GPpo5VyfCH1Oucc2nhu/527/ydlGoJp552wviMh7lmvBX3YAgOJR7AAAxaPYAQCKR7EDABSPYgcAKB7FDgBQvHH3qwf1VHV3/npxxzYefilhPFzXnOvg4tA5kXt3DG4LhlpX9S94VL39oV7PXtW/jJL7KwU59ynnVzqqvq7u2VPbCIaGhuQadXzufdxWhpNOOik5nrvl5MPjGdNqAAAmAIodAKB4FDsAQPEodgCA4lHsAADFqySNmZNGq/J9jsV7VdkIt54JyfGcdsyV0zw6J2Hn3ic3saeM9+eoXp8nJyc9mSPn+Yqo9rOWm7TNOQZ3vsPDw8nxyZMnyzVHjhxJjrv7pFKfERFNTU3J8cHBQbmmFvxlBwAoHsUOAFA8ih0AoHgUOwBA8Sh2AIDiUewAAMWbUI2g67mVIUfOdoXxbjw0lq76+uU043VUlDtne0FEtY2gx9o8dzTHUPV2inp9Pt0xVL3NIWfbS86zkvt6OWtU42bX7Lm1tVXOdXR0JMfXr18v19SCv+wAAMWj2AEAikexAwAUj2IHACgexQ4AUDyKHQCgeDVvPciJCFfdDd4Zz7H/3Ph+vaLX9TQefpWh6mNQ8fSq73vV2xWqPoYq38dx55TzyxW52wuq3CJS9RYHx72Xun5qe0FERENDQ3L83HPPlWtWrFgh55555hk5Nxb8ZQcAKB7FDgBQPIodAKB4FDsAQPEodgCA4tWcxqy6eeh4b+pcr/fJSW7VU9VpuXrd9/GQwq1ncrHKRLRb55J8VX/eVTLQvZZrfJ2TeHTNjHMS4GrN5MmT5RqXMB0eHk6ODw0NyTXTpk2Tcyp1ecopp8g1y5cvT4676/3iiy/Kubfffjs5vm/fPrmmFvxlBwAoHsUOAFA8ih0AoHgUOwBA8Sh2AIDiUewAAMWrpBH0RFViPN0Zz/dwvDTLrlLVTc1zmlvnHoOL8Cs599CtydkqUPX2giNHjsg5dY3cOalov7tPTU1Ncm7evHnJ8fnz58s17e3tcq6lpSU57q7R1q1bk+NdXV1yzaZNm+Scuodue0Yt+MsOAFA8ih0AoHgUOwBA8Sh2AIDiUewAAMU7po2gx3P6LyIv3Zazpp7qdc0naiPveprI16jKRGiETti5Jsc5zahPPFF/panXc8cwZcoUOdfa2pocnzt3rlyj0o5Tp06Va1yyUjV1do2gXUPlnTt3Jsdfe+01uaa7uzs5Pjg4KNe4dKe6HzlJ26Ned0yrAQCYACh2AIDiUewAAMWj2AEAikexAwAUj2IHACheJY2gc5rQ5kSbc7hjyIly55zTRDZRz2m8bxGpmjrfqp/X3GuntgRU3TzabRVQMX01HhExa9YsOTdz5szk+IwZM+Qa5fDhw3Ju/fr1cq6/vz85vnfvXrlm//79ck5tWXDbCNRWAbcNxFHNt8f6ueUvOwBA8Sh2AIDiUewAAMWj2AEAikexAwAUj2IHACheXja0Ri4iXHVX9RxVv9d4j7TXM2p+vE3U4x4vVJzcXVfXyV7NuTUq2t/c3CzXvP/++3JORe4PHDgg1/T09Mg5FdN3vzigthi46+B+EUHF9F3s310j9csCw8PDco069tzv12P12eUvOwBA8Sh2AIDiUewAAMWj2AEAikexAwAUr+Y0pkvwKDnJrZwEZz2Nh2PITSuppNVEltMAebSvVc9jcOvc8al7m/t5yjmGnONraGiQa1TSUDU/jvCpRvV6TlNTk5xTiUeXnlTcsbnnSH0vu9d77733Rv167rqqNe64XbpTUQnhmtePaTUAABMAxQ4AUDyKHQCgeBQ7AEDxKHYAgOJR7AAAxZs0QsdcAEDh+MsOAFA8ih0AoHgUOwBA8Sh2AIDiUewAAMWj2AEAikexAwAUj2IHACgexQ4AULz/B85eFte/zeChAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch 29/75: loss 0.012679\n",
      "epoch 29/75: loss 0.014701\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch 39/75: loss 0.013158\n",
      "epoch 39/75: loss 0.013895\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAbsAAAHRCAYAAADzBhciAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAv1UlEQVR4nO3dW4hed/XG8ZW/TTLnQyYzbdLESdNDQgqKFEtFqliliicQxAsFrQoieqGgiHijgqAFUW+kImJF8M4rC70tiEVrwQtR2pomadImncxkzseY2PlftTR2P0/3u7Kbtsvv5677199+9/FdTn1+692xvb29HQAAFPZ/r/cBAADwWqPYAQDKo9gBAMqj2AEAyqPYAQDKo9gBAMqj2AEAyqPYAQDKo9gBAMqj2AEtfe9734sdO3bEhQsXXu9DiYiI3/zmN7Fjx4545plnXu9DAd7wKHYAgPIodgCA8ih2AIDyKHZAj5aWluK+++6LsbGxGB0djc9//vOxsbHx0viDDz4Y99xzT0xNTcXu3bvj2LFj8cADD7xiP4cOHYqPfvSj8ac//SnuvPPO6Ovri8OHD8dvf/vbV/y7//znP+Oee+6J/v7+OHDgQPzgBz+IF1544TU9T6CS617vAwDebD71qU/FTTfdFD/84Q/jb3/7W/zqV7+KqampuP/++yMi4oEHHojbb789Pv7xj8d1110XDz30UHzlK1+JF154Ib761a9esa+nn346PvnJT8YXv/jF+NznPhe//vWv47777os77rgjbr/99oiImJmZife9731x+fLl+Pa3vx2Dg4Pxy1/+Mvr7+6/5uQNvWtsAWvnud7+7HRHbX/jCF67Y/olPfGJ7YmLipX/e2Nh4xdwPfvCD24cPH75i2/T09HZEbP/xj398advs7Oz27t27t7/xjW+8tO3rX//6dkRsP/bYY1f8e6Ojo9sRsX3q1KmrPTWgPP4zJtCjL3/5y1f889133x3z8/OxsrISEXHFX1zLy8tx4cKFeO973xsnT56M5eXlK+YeO3Ys7r777pf+eXJyMo4cORInT558advDDz8cd911V9x5551X/Huf+cxnOj0voDKKHdCjt771rVf88/j4eERELC4uRkTEo48+Gh/4wAdicHAwxsbGYnJyMr7zne9ERLyi2P33vl7c34v7iog4ffp03Hrrra/4944cOXJ1JwL8D+H/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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch 49/75: loss 0.011911\n",
      "epoch 49/75: loss 0.013239\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch 59/75: loss 0.012439\n",
      "epoch 59/75: loss 0.013828\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch 69/75: loss 0.011891\n",
      "epoch 69/75: loss 0.012874\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train completed, total time: 1931.256510257721.\n"
     ]
    }
   ],
   "source": [
    "max_epochs = 75\n",
    "val_interval = 10\n",
    "print_interval = 10\n",
    "epoch_loss_list = []\n",
    "val_epoch_loss_list = []\n",
    "\n",
    "scaler = GradScaler(\"cuda\")\n",
    "total_start = time.time()\n",
    "for epoch in range(max_epochs):\n",
    "    model.train()\n",
    "    epoch_loss = 0\n",
    "    progress_bar = tqdm(train_loader, total=len(train_loader), ncols=70, disable=True)\n",
    "    for batch in progress_bar:\n",
    "        images = batch[\"image\"].to(device)\n",
    "        classes = batch[\"class\"].to(device)\n",
    "        optimizer.zero_grad(set_to_none=True)\n",
    "\n",
    "        with autocast(device_type=\"cuda\" if torch.cuda.is_available() else \"cpu\", enabled=True):\n",
    "            # Generate random noise\n",
    "            noise = torch.randn_like(images).to(device)\n",
    "            # Get the time-steps\n",
    "            timesteps = torch.randint(0, num_train_timesteps, (images.shape[0],), device=images.device).long()\n",
    "            # Get model prediction\n",
    "            noise_pred = inferer(\n",
    "                inputs=images, diffusion_model=model, noise=noise, timesteps=timesteps, condition=classes\n",
    "            )\n",
    "\n",
    "            loss = F.mse_loss(noise_pred.float(), noise.float())\n",
    "\n",
    "        scaler.scale(loss).backward()\n",
    "        scaler.step(optimizer)\n",
    "        scaler.update()\n",
    "        epoch_loss += loss.item()\n",
    "\n",
    "    if (epoch + 1) % print_interval == 0:\n",
    "        print(f\"epoch {epoch:d}/{max_epochs:d}: loss {epoch_loss / len(train_loader):3f}\")\n",
    "\n",
    "    epoch_loss_list.append(epoch_loss / len(train_loader))\n",
    "\n",
    "    if (epoch + 1) % val_interval == 0:\n",
    "        model.eval()\n",
    "        val_epoch_loss = 0\n",
    "        for batch in val_loader:\n",
    "            images = batch[\"image\"].to(device)\n",
    "            classes = batch[\"class\"].to(device)\n",
    "            with torch.no_grad():\n",
    "                with autocast(device_type=\"cuda\" if torch.cuda.is_available() else \"cpu\", enabled=True):\n",
    "                    noise = torch.randn_like(images).to(device)\n",
    "                    timesteps = torch.randint(0, num_train_timesteps, (images.shape[0],), device=images.device).long()\n",
    "                    noise_pred = inferer(\n",
    "                        inputs=images, diffusion_model=model, noise=noise, condition=classes, timesteps=timesteps\n",
    "                    )\n",
    "                    val_loss = F.mse_loss(noise_pred.float(), noise.float())\n",
    "            val_epoch_loss += val_loss.item()\n",
    "        print(f\"epoch {epoch:d}/{max_epochs:d}: loss {val_epoch_loss / len(val_loader):3f}\")\n",
    "        val_epoch_loss_list.append(val_epoch_loss / len(train_loader))\n",
    "\n",
    "        # We sample one\n",
    "        model.eval()\n",
    "        guidance_scale = 4.0\n",
    "        options = {2: \"head\", 1: \"hand\"}\n",
    "        chosen = np.random.choice([1, 2])\n",
    "        conditioning = torch.cat(\n",
    "            [-1 * torch.ones(images.shape[0], 1, 1).float(), chosen * torch.ones(images.shape[0], 1, 1).float()], dim=0\n",
    "        ).to(device)\n",
    "        noise = torch.randn_like(images).to(device)\n",
    "        scheduler.set_timesteps(num_inference_steps=1000)\n",
    "        for t in scheduler.timesteps:\n",
    "            with autocast(device_type=\"cuda\" if torch.cuda.is_available() else \"cpu\", enabled=True):\n",
    "                with torch.no_grad():\n",
    "                    noise_input = torch.cat([noise] * 2)\n",
    "                    model_output = model(\n",
    "                        noise_input, timesteps=torch.Tensor((t,)).to(noise.device), context=conditioning\n",
    "                    )\n",
    "                    noise_pred_uncond, noise_pred_text = model_output.chunk(2)\n",
    "                    noise_pred = noise_pred_uncond + guidance_scale * (noise_pred_text - noise_pred_uncond)\n",
    "\n",
    "            noise, _ = scheduler.step(noise_pred, t, noise)\n",
    "\n",
    "        plt.style.use(\"default\")\n",
    "        plt.imshow(noise[0, 0].cpu(), vmin=0, vmax=1, cmap=\"gray\")\n",
    "        plt.tight_layout()\n",
    "        plt.axis(\"off\")\n",
    "        plt.title(options[chosen])\n",
    "        plt.show()\n",
    "\n",
    "total_time = time.time() - total_start\n",
    "print(f\"train completed, total time: {total_time}.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a676b3fe",
   "metadata": {},
   "source": [
    "### Learning curves"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "f8385176",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAArsAAAILCAYAAADoqVT3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABsMElEQVR4nO3dd3hUZd7G8XtaCgmBUIQIQYkIiIhGQVApUpaNNHtdpaooFooN10UXFxFQdF8NrKiIq7s2VNBVAQWRJoJBBVHBkgAJHUJLIZlkzvtHMpMZUshJJuQk+X6uSzM59ckvA9znmec8x2YYhiEAAACgFrJXdwMAAACAqkLYBQAAQK1F2AUAAECtRdgFAABArUXYBQAAQK1F2AUAAECtRdgFAABArUXYBQAAQK1F2AUAAECtRdgFgFPsww8/VLt27dSuXTulpaVVd3MAoFZzVncDANRet912m9avX6/27dvro48+qu7mWEaDBg3Uvn17SZLL5arm1lRMbm6uPvvsM61atUo//vij0tPTlZ2drXr16qlly5bq1KmTrrjiCnXr1q26mwqgjrMZhmFUdyMA1E6E3dpp8eLFevrpp7Vnzx5JBYG9adOmqlevng4ePKhDhw75tr3ooos0bdo0tWrVqrqaC6COo2cXAFBuL730kp5//nlJUlxcnO677z716tVLERERvm1+/fVXzZ07Vx9//LE2bNigm266Sf/5z38UFxdXXc0GUIcxZhcAUC5Lly71Bd3+/fvro48+0oABAwKCriS1bdtW06dP16xZs+R0OnXw4EFNmDBBHo+nOpoNoI4j7AKwtJSUFD355JO64oordMEFF+iCCy5Q37599eijj2rz5s1l7rt9+3Y99dRTGjx4sOLj49WhQwddfPHF+stf/qL//ve/ysvLK3E/781jn376qX777TeNGDFCnTt31o033ujb5rbbblO7du30+OOPS5JWrFihUaNGqXv37urYsaO6d++uBx54QMnJycWOX9oNamlpab7lP/zwg7Kzs/XSSy9p8ODBuvDCC3X++edr0KBBSkxMVG5uboltd7vdeu2113T11VcrPj5enTt31k033aSPP/5YkvT222/7zmGG2+3WlClTJElt2rTRzJkzFRISUuY+ffr00dChQxUSEqLmzZtr//79vnUTJ05Uu3bt1KdPn1L3L2+dkpKSdOONNyo+Pl4TJkzQv/71L9/6Xbt2ldnG4cOHq127dkpISCi2bu3atRo3bpx69+6tjh07qnPnzho8eLCeeeaZgJ/lRHv27NH06dN15ZVX6sILL1THjh3Vo0cP3XDDDXrllVeUnp5eZpsABBfDGABY1sKFCzVp0iTl5ubKZrOpWbNmMgxDaWlpSktL08KFCzVhwgTdcccdxfZdtmyZxo0b5wuFzZs3V3h4uHbv3q2kpCQlJSXps88+09y5cxUWFlbi+TMyMnT77bfr0KFDatmyperXr1/idnPnztWMGTMUGRmp5s2by+PxaP/+/frkk0+0YsUKLViwQLGxsaZ+9uzsbA0bNkwbN25UTEyMmjdvrrS0NP3222/67bfftHnzZr300ksB++Tk5GjUqFH69ttvJUn16tVT06ZN9fvvv+uhhx7St99+q7POOstUO7wWL16s3bt3S5LGjRt30qDrdf/99+uee+5RZGRkhc57Mrt27dKkSZPk8XjUokULhYeHa9CgQfrnP/8pSVqyZIlGjBhR4r4HDx7U+vXrJUlXXnmlb7lhGPrHP/6h//73v5IKxiTHxMTo6NGj+vXXX/Xrr7/qnXfeUWJioi655JKAY27cuFEjR45URkaGJOm0005T8+bNlZ6ero0bN2rjxo2aN2+e3nzzzQr/LgCYQ88uAEvasGGDHnvsMeXm5iohIUErVqzQihUrtHLlSq1du1ZXXnmlPB6Pnn32WS1btixg32PHjumRRx5Rbm6u2rZtqy+++EIrVqzQ4sWLtWHDBo0fP16SlJSUpFdffbXUNsyfP18xMTH66quv9Nlnn5W47aZNm/R///d/mjx5sr755ht9+umn+vrrr/XMM8/42vLKK6+Y/vmfeeYZZWZmasGCBb7zr127Vn/6058kScuXL9f3338fsM9LL73kC7ojRozQN998o0WLFmnt2rV69NFH9f7772vRokWm2yJJq1atkiTVr19fvXv3Lvd+4eHhVRZ0Jem1115Tt27dtHr1an3yySd66qmnFBsbq/j4eEkFYbc0ixcvVn5+vmw2m4YMGeJb/sorr+i///2vbDabxo0bp/Xr1+uLL77QunXr9NFHH+m8885TRkaG7rnnHu3duzfgmI8//rgyMjJ07rnn6osvvtCqVav02Wef6ZtvvtH8+fPVunVrHTx4UE888UTVFARAMYRdAJY0c+ZM5eXl6aKLLtLzzz+vZs2a+dY1atRIM2bM0GWXXSZJvl48rzVr1vh61h555JGAmQCcTqfuuusudenSRZL02WefldqGn376STNmzFCjRo1K3eaXX37R/fffr5tuuilgGrEhQ4bo4osvliStW7eunD91kT/++EMvv/yyOnTo4FsWERGhiRMn+r73P25+fr7eeustSQUzIEycOFGhoaGSCnomhw8frnvuuUc//PCD6bZIBaFeks477zw5ndb5UDA5OVnTpk0rNm548ODBkqQffvjBN2vEibzBv3PnzmrRooUk6ejRo74e8zvvvFN333236tWr59unffv2eu2119SoUSNlZmYGXMgcPnxYW7ZskSSNHj262AwUnTp10tNPP60uXbqoZcuWpQ5FARBchF0AlrNr1y5t2LBBUsGYSru95L+q/vKXv0gquPt/+/btvuUJCQnavHmzVq5cWeo8r+edd54kKTU1tdR2dOzY8aRTZrlcLt18880lrvPOpVta2CpLv379fAHMn/9wCv/jbt68WYcPH5YkXX311SUec8SIEQHBzQzvONPmzZtXaP+q0rNnzxKHl1xxxRVyOp0yDKPE3t29e/f63mP+Qxi+/PJLZWZmym63a/jw4SWeMyoqytcT/Pnnn/uW+8/kuW/fvhL3jY+P13/+8x9Nmzat3ENBAFQOYReA5fh/PH/22WeXut3555/ve/3TTz8FrHM6nWrWrFmpvZDe0FdW71p5xlTGxcUV61X08n58f/z48ZMe50TeMF7WcXNycnzLUlJSfK/PPffcEveLiIjQRRddZLotkpSZmSmpYFiClZT2O2rUqJG6d+8uqeShDIsXL5bH41FoaGjAzWnfffedJKlx48Zl9uh733t79+7VwYMHJUnR0dE655xzJEnTpk3TzJkzS7xBEcCpZZ3PogCgkP+d7iXdJV+SE8dO5uXl6ZNPPtGSJUuUnJys9PR0HT161FQ7oqOjT7pNVFRUqetK65Euj9JuhvM/rn9PojdwSVKTJk1K3bd169a+8bdmREZG6vDhwzp27JjpfatSWYF08ODB+uqrr/Tdd99p3759Ou2003zrvEMY+vTpE1DrAwcOSCp4D5Z3xoo9e/aocePGkgrGWo8cOVL79u3Tyy+/rJdfflmnn366unbtqu7du6t3796lXhwBqBqEXQCWk52d7Xvdtm3bcoVG/4/njx07pttvvz1gfGrTpk3Vpk0bX0/vgQMHfMGmPMcsjc1mO+k2FWH2uP69x2V9PF7RYQynnXaaDh8+HDBcxArK6mnu27ev6tWrp6ysLH3++ee69dZbJRUMk/G+N6666qqAfbzvvdDQULVu3dp0e84++2wtXrxY77zzjt5//30lJydr165dWrBggRYsWKCIiAiNHDlSY8aMqdTFEIDyI+wCsBz/QDZ79mzT03ZNmzbNF2aGDh2qYcOGqWXLlgHbvPjii0pMTKx0W63C/+a40uYPlio2pEIq+Nj+119/1c8//6yMjIwqnWHBq7JPsw8PD1e/fv308ccfa/Hixb6wu2jRIhmGETDUwcv73mvUqFGFH3EdERGhUaNGadSoUUpNTdWaNWv09ddfa9WqVcrMzNSLL76oXbt2aerUqZX6+QCUD5eVACzH/yYoszd35efn65NPPpEk9ejRQ4899lixoCtJR44cqVwjLaZBgwa+12U9tMB/bK8ZvXr1klTwcIkPPvig3Pt5PB5NmTKl2CwQ3p7rsgJtMIZMeGdl2LBhg68n3zsDx8CBA4uN6fa+9/bv3x+UJ77Fxsbqpptu0gsvvKCVK1fqz3/+syTpgw8+YDwvcIoQdgFYTqdOnXyvy5oqyzCMYr2Y6enpvt5L7/RiJ/J4PBUat2pl/rNG/PbbbyVuk5WVpaSkpAodv0+fPr6LhtmzZ5f5BDF/b7zxht58803deOONWrNmjW+5d6iFd4q4kvz4448Vaqu/Sy+9VI0bN5bH49FXX32ltLQ035P3ThzCIBXdGJiXl1fmE/rcbnep60rrWa9fv77+/ve/+77/9ddfy/ETAKgswi4Ay4mJifHNGvDWW2/5ZgI40UcffaRLLrlEDz30kPLz8yUp4GlopfVwzp07N2Dsqf+sBjXV+eef7wuQn376aYnb/Pvf/y61lifjcDg0efJk2Ww2HT58WKNHjz7pY28XLlyoGTNmSJIuu+wyXXrppb513h7Uo0ePaufOncX23blzp5YuXVqhtvpzOp0aMGCAJGnlypW+Y5511lnq2LFjse379evnG8rw8ssvl3rcJ554Qr179w6YZ/f1119Xz549deedd5a6n38Q5kY14NQg7AKwpAceeEB2u127du3SHXfcERBOc3Nz9d577+mJJ57Q0aNHFRkZKYfDIamg96xt27aSCj4q9p+S7MCBA3rqqaeUmJioe+65x7e8or2dVlKvXj0NHDhQUsGjkufOneu7AHC73Xr99df14osvltrbXR7du3fXxIkTZbPZ9NNPP2nQoEH673//q0OHDgVs98svv2jcuHGaOHGi8vPz1aFDBz333HMBN915H7ghSdOnTw+4KXHLli268847fb/HyvIOZfj66699T9vzn1vXX2RkpO6++25J0hdffKG///3vAUNe0tPT9fTTT+uDDz7Qrl27AobItG3bVnv37tWaNWs0efLkYnPt7ty50/dQkEaNGlXqdwGg/LhBDUCVS0lJKTVc+Lvpppt8D2i46KKLNHXqVE2aNEkbNmxQ//791aJFC7lcLu3Zs8c3VOHSSy/Vww8/HHCcBx54QHfffbeOHTuma6+9VqeffrpsNpt27dolh8OhGTNmKD4+XnPmzJHb7dZdd92l2NhYJSYmKi4uLvgFOEUeeOABrV+/Xjt37tSMGTM0e/ZsNW/eXHv27FFGRobuu+8+GYbhe6RwRQwfPlyxsbF66qmntHPnTj355JOaMmWKmjZtqqioKB04cMAXfh0Oh6677jo98sgjxXoxL7roIvXq1UsrVqzQkiVLtHLlSrVo0ULZ2dnauXOnzjvvPD344IMaOnRopWoiFfR6t2rVSjt27ND69euLPR74RLfffrt27typd955R2+//bbef/99tWjRQrm5udq3b5+vd3b06NG64oorfPtdeumluuuuu/TSSy/prbfe0jvvvOOry9GjR33T49WrV08zZ84M+BQCQNUh7AKocjk5Ob7HqJblxKnArr76al100UX697//rbVr12r37t1yu91q2LChunXrpiuvvFJXXHFFsWm6Lr/8cr322mt6+eWX9eOPP2rPnj1q1KiRBg8erJEjR/qebPbkk08qMTFR+/btk2EYlntggllNmzbVBx98oNmzZ2v58uXau3evjhw5ogsuuEAjRoxQ9+7d9cILL0iq3JRpffv2VY8ePfTZZ59p5cqV+umnn3Tw4EEdPHhQkZGRio+PV7du3XTVVVfpzDPPLPU4iYmJmjNnjhYvXqzU1FRfT+nYsWM1YsQI/f777xVu44kGDx6sWbNmSSroVY6JiSl1W7vdrsmTJ2vAgAF699139f3332vXrl2y2Wy+ITY333yzLrjggmL7jh8/XpdffrkWLlyotWvXau/evdq/f7/q1aunc889V5deeqluvfVWyz2JDqjN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3qmzz24rSXrqqb9r0aJPJEn333+XJGn+/I+1e/cu3X//XRox4g6NGjXad8yNG3/Qm2++pp9+2qzs7CxFRzdSly5dNXLknWrePCag7ZGR9TVt2kwlJj6vH374Trm5brVuHafRo+/RhRd2Lke1g4+wawG+sMtsDAAAWNKAAYP1yiuz9fHHH5YYdj/66EOFhYVpwIAhmjz5b1q9eoWGDh2piy/upuPHj+vdd9/S9OlTlJuba2qYw759e3X//XcrLCxMY8c+qDPOaKXU1BRNnPigcnPdCg8v2nbPnt0aM+YORUZG6r77xism5nSlpu7QSy8l6v7779K///22TjutmUaOvFNOp0v/+98CPfjgo2rf/hw1adJUu3fvKnb+b775Wo88Ml5nn91OEyY8rKZNT9O2bcl69dWXtG7dWr3++luKjm7k2z4rK1MPPjhWCQkDdO21N2rnzlQlJv5Tf/3rg3r33YVq0KChqboHA2HXAorG7HpkGIZsNls1twgAAHO+27dJnyR/rpz8HNP72u02eTxGFbSqSKgjVIPi+uvC0zpVaP/IyEj173+FPvroQ/3440add975vnW//PKTfv11iwYPvkqhoSFyOp264YZbdMcdd/u2Offc8zRwYF8tWvSJqbC7YMH7ysrK1GOPPaFevfrI6bSrX7/L5XSGasqUyWrQoIFv29TU7erU6QJde+0N6tr1EknSeeedr+zsbD3//AytWrVC1157g2JiTleTJk0kSa1anaH27TuUev7ExH8qLCxMzz33oqKiCs51wQUXqmHDaP3tb4/o3Xff0l133evbfteunXrssb/riisGSZLi4y/S9u3b9fbbbyopab369u1f7p89WAi7FuDt2TUMKd9jyOkg7AIAapal21dob9a+6m5GmZbuWFHhsCsV3Hj20UcfauHCDwLCrvfGtGuuuUGhoWH6xz+mFds3MjJSjRs30Z49u02d88cfN8pms6lr10sDlvfu3VdPPfVkwLIuXbqpS5duxY5xxhlnSpL27jV37n379mrbtmT17NnbF3S9LruspxwOhzZs+DZguc1mU58+/QKWtWwZK0k6cuSIqfMHC2HXAkJOeIqa08F9gwCAmqXfGb0s37Pbr1WvSh0jLq6NLrjgQi1fvkxjxz6gqKgGyszM0LJln+u88873jYn99dctev/9d7Vhw7c6dChdubm5vmP498SW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XUe9zKFe5lEzc6iXOdTLHOplniXDbkXk5OToscce0/Dhw9WhQ4dKHatRowjZbMELu15RUeHl2q5hg6LtXCFORUdHlLF17VXeeqEA9TKHeplHzcyhXuZQL3OoV/lVadg9dOiQ6tevL6fT3GmioqIkqVgPrmEYyszM9K339+KLL8rpdOq+++6reIMLpadnBr1nNyoqXEePZiu/HGNwc3OKplc7cuy4Dh3KDFpbagKz9arrqJc51Ms8amYO9TKHeplDvYqUtzOw0mF3xYoVmj9/vhITE33Lvv76az322GPas2ePIiIidM8995gaQxsXFydJ2r59u+Lj433L09LS5Ha71aZNm2L7fPbZZ9q9e3fA9h6PR4ZhqEOHDhozZozuvffecp3f4zHk8Rjlbm955ed7lFeOMbh2v17l4zl55dqnNipvvVCAeplDvcyjZuZQL3OolznUq/wqFXaTkpJ0zz33yGazyePxyG63a9++fbrnnnuUnZ2tDh06KC0tTTNmzNCZZ56p3r17l+u4sbGxiouL0/Lly3XVVVf5li9btkxOp1M9evQots/cuXOLPXDirbfe0rJlyzR37lw1bty4Mj/qKRVwg1odv2oDAACojEqNbn7jjTcUHh6uDz74QHZ7waHeffddZWdn6/7779eHH36ozz//XM2aNdM777xj6thjx47VkiVLNG/ePO3cuVNLly7VrFmzNHToUDVu3FibNm1SQkKCkpKSJEmtW7dW27ZtA/5r3LixXC6X73VNEcJsDAAAAEFRqZ7dTZs2qX///mrbtq1v2fLlyxUWFqahQ4dKkho2bKh+/fpp0aJFpo6dkJCgGTNmaM6cOZo5c6aaNGmiYcOGacyYMZKk7OxspaSkKCsrqzI/giX59+zyEQUAAEDFVSrsHjx4UGeccYbv+yNHjuiXX37RpZdeqsjISN/y0047TUeOHDF9/CFDhpT6FLSuXbtq69atZe5/3333BeWGtVONeXYBAACCo1LDGEJCQgJmTFizZo0Mw9Bll10WsF1GRkaxOXNROp6gBgAAEByVCrtnnXWWli9frry8PHk8Hr3xxhuy2WzFbkRbv369WrRoUamG1iX07AIAAARHpcLuoEGD9Ntvv6l///7q16+fNm7cqJ49e6p169aSpKysLE2fPl0bN25Uv379gtLguoCwCwAAEByVGrN766236vfff9eHH36o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N0579+6thlZax/vvv68rr7xS8fHx6t27t/72t7/p4MGDvvW//fabbr/9dsXHxys+Pl533HGH/vjjj2pscfXxeDx67bXXNGjQIHXq1Eldu3bV2LFjtXPnTt82vMdKN3LkSLVr105paWm+ZdSrSJ8+fdSuXbti/w0aNMi3DfUqLi0tTffee68uvPBCdenSRWPGjNGuXbt866lZgbS0tBLfX97/PvzwQ0nUq9wMVJkFCxYY7dq1M+bNm2fs2LHD+OKLL4xu3boZjz/+eHU3rdodOnTIGD16tNG9e3fjwgsvNMaNGxew/o8//jA6depkPPLII8Yff/xhJCUlGddff70xaNAgIzc3t5paXb1ee+01o3379sbcuXONbdu2GStWrDB69uxp3HzzzYbH4zHS09ONbt26GaNGjTK2bNli/Pjjj8bo0aONyy67zDhy5Eh1N/+Umzp1qnHBBRcYCxcuNHbs2GGsXr3a6Nu3r9GnTx8jJyeH91gZ5s+fb3To0MFo27atkZqaahgGfyZP1Lt3b2PatGnGvn37Av5LT083DIN6leTIkSNG7969jbvuusv49ddfjY0bNxpXX321kZCQYOTn51MzP3l5ecXeW/v27TM++ugjo2PHjsb27duplwmE3SrUt29fY8KECQHL3n77baN9+/bGnj17qqlV1vDmm28at912m3HgwAGjd+/excLuxIkTjV69ehlut9u37I8//jDatm1r/O9//zvVza12Ho/HuOyyy4yJEycGLH/33XeNtm3bGr/88ovx4osvGueff75x+PBh3/rDhw8bnTp1Ml566aVT3eRq5Xa7jcsvv9xITEwMWL5w4UKjbdu2xqZNm3iPlWLv3r1G586djcmTJweEXeoVqHfv3sYLL7xQ6nrqVVxiYqJx2WWXGdnZ2b5lKSkpxqJFi4zjx49Ts5PIzc01EhISjGeeecYwDN5jZjCMoYps27ZNqamp6tWrV8Dynj17yuPxaNWqVdXUMmvo1auX5s2bp8aNG5e4fvXq1erevbucTqdvWVxcnFq2bKmVK1eeqmZahs1m0yeffKK//vWvAcubNWsmScrMzNTq1asVHx+vBg0a+NY3aNBA559/fp2rmdPp1PLly3XPPfcELLfbC/7Kc7lcvMdK8eSTTyo+Pl5//vOfA5ZTL3OoV3Gff/65+vXrp7CwMN+yM888UwkJCQoNDaVmJ/Hvf/9bR48e1V133SWJ95gZhN0qkpKSIklq1apVwPKYmBi5XC4lJydXR7MsIzY2Vg6Ho8R1mZmZ2rdvX7HaSdIZZ5xRZ2vXsGFD1a9fP2DZsmXLVK9ePbVt21YpKSmKjY0ttl9drpm/n3/+WbNnz1bv3r0VGxvLe6wEixYt0po1azR58uSA5fyZNId6Fed2u/X7778rNjZWzz33nPr06aNLLrlEDzzwgNLT06nZSWRlZenVV1/VyJEjFRkZSb1MIuxWkYyMDElSREREwHKbzaaIiAjfehRXWu0kKTIyUseOHTvVTbKkL7/8Uu+9955Gjx6t+vXrKzMzk5qV4JlnnlHHjh117bXX6rLLLtOLL77Ie6wEhw8f1pQpU/TAAw8oJiYmYB31KtlPP/2k22+/Xd27d1evXr30+OOP6+DBg9SrBEeOHFFeXp7+/e9/KycnR4mJiZo8ebK+/fZbDR8+nJqdxHvvvSePx6Mbb7xREn8mzXKefBMAVrNo0SI99NBDGjx4sEaPHl3dzbG0UaNG6eqrr9bPP/+s5557TikpKZo6dWp1N8typk6dqtjYWN1yyy3V3ZQaITo6WhkZGRo5cqRatmypX375RTNnztSGDRv02muvVXfzLCcvL09Swad6jz76qCSpQ4cOcjqduvvuu7Vu3brqbJ7lvfHGG7r22msVGRlZ3U2pkQi7VSQqKkqSivXgGoahzMxM33oU5/2ovqTe72PHjgWMSa2L3nzzTU2dOlW33HKLHnvsMdlsNkny9e6eqK7XrFGjRmrUqJHatGmj1q1b67rrrtPXX38tifeY18qVK/X555/rgw8+8I1r9sefyeI++OCDgO/btm2rpk2basSIEby/SuANaR07dgxY3qVLF0nSL7/8IomaleTHH3/Uzp071bdvX98y/kyaQ9itInFxcZKk7du3Kz4+3rc8LS1Nbrdbbdq0qa6mWV69evUUExOj7du3F1u3bds2devWrRpaZQ1vv/22nnrqKT3wwAO64447AtbFxcWVWrOzzjrrVDXREtLT0/XNN9+oS5cuatq0qW9527ZtJRX8OeQ9VmTRokU6fvy4Bg8e7FtmGIYkqX///urSpQv1Kof27dtLkvbt20e9ThAZGammTZvqyJEjAcs9Ho8k6bTTTqNmpVi6dKkaNGgQkCX4d9IcxuxWkdjYWMXFxWn58uUBy5ctWyan06kePXpUU8tqhl69emnVqlUBD+D4+eeftWvXLvXp06caW1Z91q5dqyeffFITJ04sFnSlgpp9//33OnTokG/ZgQMH9MMPP9S5muXk5Gj8+PFauHBhwPItW7ZIKpjFgvdYkXHjxunjjz/WwoULff9NmTJFkvTyyy9rypQp1MvPH3/8oYcffrjYA1t+/PFHSQUzDFCv4nr27KmVK1cqJyfHtywpKUmS1K5dO2pWim+++UadOnUqdlM39TKhuuc+q80WLVpktGvXznjttdeMtLQ044svvjA6d+5sTJs2rbqbVu0OHTrkmyS7Z8+ext133+37Pjs729ixY4cRHx9vPPTQQ0ZycrKxceNGY8iQIcb1119v5OfnV3fzTzmPx2NcccUVxs0331ziROMZGRnG0aNHjR49ehgjR440tmzZYmzZssUYNmyY0bt3byMzM7O6f4RTbuLEiUZ8fLzx/vvvG9u3bze+/vprY9CgQb6HbPAeK9s333wTMM8u9SqSkZFhXH755cagQYOM1atX+x4adPnllxsDBw40cnNzqVcJUlJSjPj4eOOuu+4y/vjjD2P16tVG7969jRtvvNEwDN5jpfHOe30i6lV+NsMo/KwKVeLjjz/WnDlztH37djVp0kTXXXedxowZU+K4uLrktttu0/r160tc9/TTT+uaa67Rjz/+qOnTp2vTpk0KCwtT7969NXHiREVHR5/i1la/nTt3lnmlfu+99+q+++7T9u3bNXXqVK1fv142m02XXHKJHn30UbVs2fIUttYacnNzNWvWLH3yySfau3evmjRpoosuukjjx4/31YP3WOnWrVunoUOHatmyZdSrBGlpafq///s/rVu3Tunp6WrYsKF69+6t8ePHq1GjRpKoV0k2b97sq0lISIj+9Kc/6a9//atvTC81C+TxeHTOOeforrvu0vjx44utp17lQ9gFAABArVW3uxcBAABQqxF2AQAAUGsRdgEAAFBrEXYBAABQaxF2AQAAUGsRdgEAAFBrEXYBAABQaxF2AQBluu2229SuXTvf43ABoCZxVncDAKC2SktLU9++fcu9vfdJeACA4CHsAkAVCw8PL1eIjY+PPwWtAYC6hbALAFUsNDRUo0aNqu5mAECdRNgFAIuZOHGiFixYoOnTp6tp06ZKTEzU1q1bZRiG2rVrp7vuukuXX355sf2WLl2q//73v/r555+VmZmpBg0aKD4+XqNGjSqx13jPnj2aPXu2Vq5cqQMHDqhBgwbq3bu37r33XjVv3rzEtq1du1YvvPCCtmzZIkk699xzNWHCBF144YUB233//fd69dVXtXHjRh06dEiRkZGKjY3V4MGDdeutt8rhcFS+UABQDoRdALCodevWadGiRfrTn/6k7t27Ky0tTR9//LHuuusuzZ49W3369PFt+8ILL2jWrFmKjo5W//791axZM+3YsUNLlizRl19+qZkzZ+qKK67wbZ+cnKybbrpJ2dnZGjJkiFq2bKnff/9dH3zwgb744gvNnz9frVq1CmjP119/rddee01DhgxRr169tHbtWn3zzTcaNWqUPvvsM8XExEiSkpKSNGzYMIWFhemKK65QixYtdOzYMa1YsUJTp07Vxo0b9dxzz52aIgKAAQCoEqmpqUbbtm2Niy++2NR+jzzyiNG2bVujXbt2xqpVqwLWvf/++0bbtm2NhIQE37KffvrJaNeunXHxxRcbu3fvDtj+22+/Ndq3b2906dLFyMrK8i2/5pprjLZt2xY7/n/+8x+jbdu2xujRo33Lbr31VqNt27ZGt27djJSUFN9yj8djDB8+3Gjbtq0xb9483/IJEyYYbdu2Nb766quAY+fm5ho333yzcdFFFxm7du0yVRMAqCh6dgGgihmGobS0tDK3cblcatasWcCy+Ph4de/ePWDZVVddpenTpys5OVmpqamKjY3VwoULZRiGbrnllmLDDzp37qyuXbtq7dq1WrVqlfr3769ffvlFmzdvVvv27Ysd/9prr9XOnTt12mmnFWvjDTfcoDPPPNP3vc1mU48ePfT1119r586dvuVHjhyRpGJDFVwul9544w05nfzTA+DU4W8cAKhiR44cOekUZO3bt9dHH30UsOzEcbBSQYBs3bq1fvjhByUnJys2NlabN28udXtJ6tSpk9auXauffvpJ/fv3982Xe8455xTbNiwsTA8//HCJx+nYsWOxZVFRUZKkjIwM37LevXtr1apVmjBhgkaNGqV+/frprLPOkiSCLoBTjr91AKCKRUREaMaMGWVuExkZWWxZ48aNS9y2YcOGkqSjR49Kkg4ePFjm9o0aNZIkHTp0KGB7b1Atr5K2t9sLnk1kGIZv2V/+8hdlZmbqpZde0nPPPafnnntOTZs2Vffu3XX11Vera9eups4LAJVB2AWAKuZyudSvXz/T+3mD5Ik8Ho+kginNpILhBFJg4Cxpe+923uPm5uaablN53Xnnnbr55pv11VdfafXq1VqzZo0WLFigBQsW6Prrr9eUKVOq7NwA4I/HBQOARXl7Yk90+PBhSUU9ud6v3h7bE6Wnp5e4vXd5Valfv74GDx6s6dOna9WqVZo7d66aNWum+fPna+3atVV6bgDwIuwCgEVt3Lix2LK8vDylpKRIklq2bClJOu+88yRJGzZsKPE43333XcB23q9JSUnKz88P2Nbj8WjcuHG6//77lZeXV6F2HzlyJOCGNamgV7l79+66/fbbJUk//fRThY4NAGYRdgHAotatW6dvv/02YNmHH36oY8eOqUOHDr7ZG6699lrZ7Xa988472r17d8D2a9as0YYNG9SsWTPfzAvt2rXTueeeq4MHD+rDDz8M2P6zzz7TokWLlJmZWaGbyQ4dOqRLL71UI0aM8M3K4M8bcr1z8gJAVWPMLgBUsZycHM2dO/ek24WGhurWW2/1fX/llVfqzjvvVN++fdW6dWvfQyUcDoceeugh33Znn322xo0bp+eee07XXHONEhIS1LhxYyUnJ+uLL75QWFiYpk+fLpfL5dvnqaee0m233abHH39c69at01lnnaU//vhDixYtUmRkZKkzMpxMdHS07r77br344osaOHCg+vXrp+bNmys7O1vfffed1q9fr3PPPVd/+tOfKnR8ADCLsAsAVSw7O/ukszFIBWNc/cNux44dde211yoxMVHLly+Xx+NRp06ddN999+nSSy8N2Hf06NFq06aN3nzzTX3yySfKzs5Wo0aNlJCQ4Fvn75xzztGCBQuUmJior7/+WosXL1aDBg00cOBA3XvvvcWenmbGvffeq3bt2um9997T0qVLdfjwYblcLp155pm6//77NWzYMIWEhFT4+ABghs0o7fZdAEC1mDhxohYsWKBJkyYFhF8AgHmM2QUAAECtRdgFAABArUXYBQAAQK1F2AUAAECtxQ1qAAAAqLXo2QUAAECtRdgFAABArUXYBQAAQK1F2AUAAECtRdgFAABArUXYBQAAQK1F2AUAAECtRdgFAABArUXYBQAAQK31/xisORBv0EK2AAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 800x550 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.style.use(\"seaborn-v0_8\")\n",
    "plt.title(\"Learning Curves\", fontsize=20)\n",
    "plt.plot(np.linspace(1, max_epochs, max_epochs), epoch_loss_list, color=\"C0\", linewidth=2.0, label=\"Train\")\n",
    "plt.plot(\n",
    "    np.linspace(val_interval, max_epochs, int(max_epochs / val_interval)),\n",
    "    val_epoch_loss_list,\n",
    "    color=\"C1\",\n",
    "    linewidth=2.0,\n",
    "    label=\"Validation\",\n",
    ")\n",
    "plt.yticks(fontsize=12)\n",
    "plt.xticks(fontsize=12)\n",
    "plt.xlabel(\"Epochs\", fontsize=16)\n",
    "plt.ylabel(\"Loss\", fontsize=16)\n",
    "plt.legend(prop={\"size\": 14})\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0cd48c2d",
   "metadata": {},
   "source": [
    "## Sampling process with classifier-free guidance\n",
    "In order to sample using classifier-free guidance, for each step of the process we need to have 2 elements, one generated conditioned in the desired class (here we want to condition on Hands `=1`) and one using the unconditional class (`=-1`).\n",
    "Instead using directly the predicted class in every step, we use the unconditional plus the direction vector pointing to the condition that we want (`noise_pred_text - noise_pred_uncond`). The effect of the condition is defined by the `guidance_scale` defining the influence of our direction vector."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "f71e4924",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1000/1000 [00:11<00:00, 85.46it/s]\n"
     ]
    },
    {
     "data": {
      "image/png": "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jpybmJiojj948ECumZmZqY672LprQquur9tO4f6W4racqHvF3Q8uGq4+h25LQqSpuft8qvektq+UEjvnbpvKRx99JOd++9vfVsfdvdd2c/e2qevrrruac+81cq+4rTdN8M0OAJAexQ4AkB7FDgCQHsUOAJAexQ4AkB7FDgCQXiu/eqBiypFtBGoLQSn61xVK0RFmFxmPbD1w0Wa1xv2d1157Tc699dZb1fETJ07INQMDA3JORc3n5+flGrUlYHV1Va5ZWlqSc3Nzc139nVJKmZqaknMqhq62F5Sij89tB3D35U6gtmdEf8lhaGioOu62P7jPhvrsnj59Wq5R18Mdt/u837p1qzp+9epVueadd96Rcx9//LGce1Gpa9j2s9JRr8fWAwAANkGxAwCkR7EDAKRHsQMApEexAwCk1zgu2el05NzevXur45GGwK4xrGtGqlJYkYa7jkuCqYbALiH5wx/+UM6p1KVrLP348WM5d+PGjeq4SkiWotN87ry611PJSpfgdElId798k6j7/69//atc09vbK+dUktqlHY8fPy7n1PPj0KFDco26J9xxX79+Xc5dvny5Ov6Xv/xFrnlRE5fRJvdtNsCPUsfg0vhN8M0OAJAexQ4AkB7FDgCQHsUOAJAexQ4AkB7FDgCQXuOtBy72ryKhrnGni88rLhar4unPnj2Ta9zxqb/lth6oeLX7O64Bsorwu2Nw2z3Gx8er467RsmoS7bYKuOPD9nL3v4vVq+0ybnuBu8/VuunpablGNS7/6KOP5Bq3jeC9996rjk9OTso1O516Lke3EERer+1jeF7PD77ZAQDSo9gBANKj2AEA0qPYAQDSo9gBANKj2AEA0mu89cBtFVBR0UiE1MWX1S8llKK737sovvtbKk7r3tPq6mrXf+fatWtyrr+/vzruOv0/evRIzqmtDPxywDfT8vKynFOftQMHDsg1p06dknN9fX3VcdfJ/oMPPqiO//73v5dr1C8blFLKwsKCnNvJIr9S4Na456h67rk1SnTrgXpeHjx4MPR6X+CbHQAgPYodACA9ih0AID2KHQAgPYodACC9xmlMl2pUqRvXPFqlOyOpn1J0StKlSCPJT7dm16766VxcXJRrXCJO/a1IE+2trENOg4ODcm5oaKg6fubMGbnGJZXX1taq4w8ePJBr3nnnner4pUuX5Br3WXtRuWdiJPHo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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "model.eval()\n",
    "guidance_scale = 4.0\n",
    "conditioning = torch.cat([-1 * torch.ones(1, 1, 1).float(), torch.zeros(1, 1, 1).float()], dim=0).to(device)\n",
    "\n",
    "noise = torch.randn((1, 1, 64, 64))\n",
    "noise = noise.to(device)\n",
    "scheduler.set_timesteps(num_inference_steps=1000)\n",
    "progress_bar = tqdm(scheduler.timesteps)\n",
    "for t in progress_bar:\n",
    "    with autocast(device_type=\"cuda\" if torch.cuda.is_available() else \"cpu\", enabled=True):\n",
    "        with torch.no_grad():\n",
    "            noise_input = torch.cat([noise] * 2)\n",
    "            model_output = model(noise_input, timesteps=torch.Tensor((t,)).to(noise.device), context=conditioning)\n",
    "            noise_pred_uncond, noise_pred_text = model_output.chunk(2)\n",
    "            noise_pred = noise_pred_uncond + guidance_scale * (noise_pred_text - noise_pred_uncond)\n",
    "\n",
    "    noise, _ = scheduler.step(noise_pred, t, noise)\n",
    "\n",
    "plt.style.use(\"default\")\n",
    "plt.imshow(noise[0, 0].cpu(), vmin=0, vmax=1, cmap=\"gray\")\n",
    "plt.tight_layout()\n",
    "plt.axis(\"off\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3483b097",
   "metadata": {},
   "source": [
    "## Cleanup data directory\n",
    "\n",
    "Remove directory if a temporary was used."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "b00d4f9a",
   "metadata": {},
   "outputs": [],
   "source": [
    "if directory is None:\n",
    "    shutil.rmtree(root_dir)"
   ]
  }
 ],
 "metadata": {
  "jupytext": {
   "formats": "py:percent,ipynb"
  },
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
